<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
  <script>
    // var cal = $.Callbacks('once memory');
    // // console.log(cal);
    // function a (ms) {
    //   console.log('a', ms);
    // }
    // function b (ms) {
    //   console.log('b', ms);
    // }
    // cal.add(a);
    // cal.fire('hi');
    // cal.add(b);
    // cal.fire();

    // var def = $.Deferred();

    // var pro = (function () {
    //   var def = $.Deferred();
    //   setTimeout(function () {
    //     var num = Math.random();
    //     console.log(num);
    //     if (num < 0.3) {
    //       console.log(1)
    //       def.reject('滚')
    //     } else if (num > 0.3 && num < 0.8) {
    //       console.log(2)
    //       def.notify()
    //     } else {
    //       console.log(3)
    //       def.resolve('欧耶， 我们做朋友吧')
    //     }
    //   }, 1000)
    //   return def.promise()
    // })();

    // pro.then(function () {
    //   console.log('成功');
    //   throw Error('error');
    //   var def = $.Deferred();
    //   def.reject('bbbb')
    //   return def.promise();
    // }, function () {
    //   console.log('失败');
    //   var def = $.Deferred();
    //   def.reject('aaaaa')
    //   return def.promise();
    // }, function () {
    //   console.log('仍需努力');
    // }).then(function (ms) {
    //   console.log('ok2', ms);
    // }, function (ms) {
    //   console.log('not ok 2', ms);
    // }, function () {
    //   console.log('loading2');
    // }).done(function(){
    //   console.log('成功3')
    // });

    // es6 promise

    // var pro = new Promise(function (res, rej) {
    //   console.log('1')
    //   setTimeout(function () {
    //     var num = Math.random();
    //     if (num > 0.6) {
    //       res('我答应了');
    //     } else {
    //       rej('滚');
    //     }
    //   });
    // });
    // pro.then(function(ms) {
    //   console.log(ms)
    //   return '结婚'
    // }, function(err) {
    //   console.log(err)
    // }).then(function(ms){
    //   console.log(ms)
    //   return  new Promise(function(res, rej) {
    //     var num = Math.random();
    //     if (num < 0.5) {
    //       rej('离婚');
    //     } else {
    //       res('生孩子');
    //     }
    //   })
    // }, function(err) {
    //   console.log(err);
    // }).then(function (ms) {
    //   console.log(ms)
    // }).catch(function(error) {
    //   console.log('catch', error)
    // });
    function promise(num) {
      var pro = new Promise(function (res, rej) {
        if(num > 5) {
          res('ok');
        } else {
          rej('not ok');
        }
      });
      return pro;
    }
    Promise.all([promise(4), promise(7), promise(8)]).then(function(){
      console.log('成功')
    },function() {
      console.log('失败')
    });
    Promise.race([promise(6), promise(4), promise(8)]).then(function() {
      console.log('race 成功');
    }, function() {
      console.log('race 失败');
    })

  </script>
</body>

</html>